#include <bits/stdc++.h>
using namespace std;
int a[200005];
int f[200005]; // f[i]表示前i个数字最少需要删掉几个才可以有一个合法的分块方案
int main() {
  int t, n;
  cin >> t;
  while (t--) { // t组数据
    cin >> n;
    memset(f, 0x3f, sizeof(f));  // 初始化为最大值
    for (int i = 1; i <= n; i++) { // 输入
      cin >> a[i];
    }
    f[0] = 0; // 0个数字时只要删掉0个
    for (int i = 1; i <= n; i++) {
      f[i] = min(f[i], f[i - 1] + 1); // 删掉当前数，即再上一个数的基础上加一
      if (a[i] <= n - i) {
        // 如果当前数为下一段的开始，把当前数开始分成一段，那么这段中不需要删除任何数
        f[a[i] + i] = min(f[a[i] + i], f[i - 1]);
      }
    }
    cout << f[n] << endl; // 输出答案
  }
  return 0;
}